#pragma once

//这个文件是对信号量相关的接口进行包装，方便后续的线程池以及即将写的基于循环队列的生产者消费者模型的书写更加的简单化
#include<iostream>
#include<semaphore.h>
#include<pthread.h>

namespace SemModule
{
    const int defaultvalue = 0; //表示信号量的初始值
    class Sem
    {
    public:
        Sem(unsigned int vlaue = defaultvalue)
        {
            sem_init(&_sem,0,vlaue); //初始化信号量对象
        }
        void P()
        {
            sem_wait(&_sem);  //P操作说白了就是对变量进行--处理，表示已经预定了一块内存空间
        }
        
        void V()
        {
            sem_post(&_sem); //V操作说白了就是对变量进行++处理，表示已经用完了预定的空间，返还了
        }

        ~Sem()
        {
            sem_destroy(&_sem); //对变量进行销毁处理
        }
    private:
        sem_t _sem; //定义一个信号量类型的变量
    };
}
